home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 17
/
AMIGAplus Sonderheft 17 (1999)(ICP)(DE)[!].iso
/
PD
/
Anwendungen
/
-DataTypes-
/
animation
/
animation.datatype.doc
< prev
next >
Wrap
Text File
|
1998-06-17
|
65KB
|
1,708 lines
TABLE OF CONTENTS
animation.datatype/--datasheed--
animation.datatype/--model--
animation.datatype/ADTM_LOCATE
animation.datatype/ADTM_PAUSE
animation.datatype/ADTM_START
animation.datatype/ADTM_STOP
animation.datatype/DTM_COPY
animation.datatype/DTM_FRAMEBOX
animation.datatype/DTM_PRINT
animation.datatype/DTM_PROCLAYOUT
animation.datatype/DTM_REMOVEDTOBJECT
animation.datatype/DTM_TRIGGER
animation.datatype/DTM_WRITE
animation.datatype/GM_GOACTIVE
animation.datatype/GM_GOINACTIVE
animation.datatype/GM_HANDLEINPUT
animation.datatype/GM_HELPTEST
animation.datatype/GM_HITTEST
animation.datatype/GM_LAYOUT
animation.datatype/GM_RENDER
animation.datatype/MAIN
animation.datatype/ObtainAnimationEngine
animation.datatype/OM_DISPOSE
animation.datatype/OM_GET
animation.datatype/OM_NEW
animation.datatype/OM_SET
animation.datatype/OM_UPDATE
animation.datatype/preferences
animation.datatype/--datasheed-- animation.datatype/--datasheed--
NAME
animation.datatype -- base datatype for animations
SUPERCLASS
datatypesclass
DESCRIPTION
The animation.datatype is the super-class for any animation related
classes.
This class is responsible for creating the controls, scaling,
remapping and synchronization.
METHODS
OM_NEW -- Create a new animation object. Passed to superclass, then
create internal resources, read preferences, then fall througth
OM_SET.
OM_GET -- Obtain the value of an attribute. Passed to superclass
if the attribute is not recognized by animation.datatype class.
OM_SET -- Set the values of multiple attributes. Passed to
superclass first.
OM_UPDATE -- Update the values of multiple attributes. Falls
througth to OM_SET.
OM_NOTIFY -- Notify new attributes. Passed to superclass.
OM_DISPOSE -- Dispose of a animation object. Passed to superclass
after animation.datatype instance has freed it's resources.
GM_LAYOUT -- Layout the object and notify the application of the
title and size. Passed to superclass first.
GM_HITTEST -- Determine if the object has been hit with the
mouse within the gadget domain rectange. Overrides the
superclass.
GM_HELPTEST -- Determinate if the object has been hit by an help
test within the gadget help domain rectangle. Overrides the
superclass.
GM_GOACTIVE -- Tell the object to go active. Overrides the
superclass.
GM_HANDLEINPUT -- Handle input. Overrides the superclass.
GM_GOINACTIVE -- Inactive the object. Overrides the superclass.
GM_RENDER -- Cause the current frame to render.
DTM_FRAMEBOX -- Obtain or set the display environment that the
animation requires. Passed to superclass first.
Currently, only "obtain" (e.g. FRAMEF_SPECIFY is NOT set)
is implemented, "set" might be implemented by a subclass...
DTM_PROCLAYOUT -- Layout object on application process. See
GM_LAYOUT for functionality.
DTM_REMOVEDTOBJECT -- Remove an object from the window/screen.
Passed to superclass after all.
DTM_TRIGGER -- Cause an async event to occur.
Overrides the superclass.
DTM_OBTAINDRAWINFO -- not implemented yet
DTM_DRAW -- not implemented yet
DTM_RELEASEDRAWINFO -- not implemented yet
DTM_COPY -- Copy the current frame to the clipboard as an IFF ILBM
picture.
Overrides the superclass.
DTM_WRITE -- Write the current or a specified frame to a file as an
IFF ILBM picture.
Overrides the superclass.
DTM_PRINT -- Print the current or a specified frame.
Overrides the superclass.
ADTM_LOADFRAME -- Load a frame of the animation.
ADTM_UNLOADFRAME -- Deallocate any memory allocated by
ADTM_LOADFRAME.
ADTM_START -- Start the animation. This MUST be passed to the
super-class AFTER the sub-class has started.
ADTM_PAUSE -- Pause the animation. This MUST be passed to the
super-class BEFORE the sub-class pauses.
ADTM_STOP -- Stop the animation. This MUST be passed to the
super-class BEFORE the sub-class stops.
ADTM_LOCATE -- Used to locate a frame of the animation.
All other methods are passed to the superclass.
ATTRIBUTES
OBP_Precison (ULONG) -- Precision to use when obtaining colors.
See the PRECISION_ defines in <graphics/view.h>.
Fixed to PRECISION_ICON (V40),
Defaults to PRECISION_IMAGE V41).
Applicability is () (V40)
Applicability is (ISG) (V41)
DTA_ControlPanel (BOOL) -- Determine whether the control
panel is shown. Defaults to TRUE.
(It is currently not recommned to change this attribute while
the object is attached to a window/requester).
Note: Chaning this attribute affects also the height returned
by DTM_FRAMEBOX.
Applicability is (I).
Applicability is (ISGU) (V41)
DTA_Repeat (BOOL) -- Determine whether the animation
should repeat playing. Defaults to FALSE.
Applicability is (ISGU) (V41)
DTA_Immediate (BOOL) -- Indicate whether the animation
should immediately begin playing. Defaults to
FALSE.
Applicability is (I).
Applicability is (ISGU) (V41)
ADTA_ModeID (ULONG) -- Set and get the graphic mode id of the
picture. The mode id set here will be checked by BestModeIDA
based on width/height/depth info of the animation.
Defaults to 0.
Applicability is (ISG).
ADTA_KeyFrame (struct BitMap *) -- Pointer to the key
frame.
This bitmap should be allocated using AllocBitMap because this
is the only way to force GetBitMapAttr and other functions to
return correct attributary flags.
This bitmap will be used for internal calculations and
assumtions about bitmap data layout; the bitmaps got from
ADTM_LOADFRAME have the same size and layout, but GetBitMapAttr
may return wrong values for these bitmaps!
Note that this bitmap type may change if someone says the object
in which environment the object will be embedded in
(DTM_FRAMEBOX). In this case a subclass may change the output
format (preserving only ADTA_Width and ADTA_Height).
Applicability is (ISG).
ADTA_ColorRegisters (struct ColorRegister *) -- Color table.
Applicability is (G).
ADTA_CRegs (ULONG *) -- Color table to use with SetRGB32CM().
Applicability is (G).
ADTA_GRegs (ULONG *) -- Color table (like ADTA_CRegs, but contains
color values of allocated (shared) pens).
Applicability is (G).
ADTA_ColorTable (ULONG *) -- PRIVTAE
ADTA_ColorTable2 (ULONG *) -- PRIVATE
Applicability is (G).
ADTA_Allocated (ULONG) -- Number of shared colors allocated.
Applicability is (G).
ADTA_NumColors (WORD) -- Number of colors used by the picture.
(May be 0 in the case of a truecolor animatoin without a
palette).
Applicability is (ISG).
ADTA_NumAlloc (WORD) -- Number of colors allocated by the picture.
Applicability is (G).
ADTA_Remap (BOOL) -- Indicate whether the animation should be
remapped or not.
Defaults to TRUE.
Applicability is (IS).
Applicability is (ISG) (V41).
ADTA_Screen (struct Screen *) -- Screen to remap to
Applicability is (IS) (V41).
ADTA_NumSparse (UWORD) -- Number of colors used for sparse remapping
Applicability is (IS) (V41).
ADTA_SparseTable (UBYTE *) -- Pointer to a table of pen numbers
indicating which colors should be used when remapping the image.
This array must contain as many entries as there
are colors specified with ADTA_NumSparse
Applicability is (IS) (V41).
ADTA_Width (ULONG) -- Width of a frame in pixels.
Applicability is (ISG).
ADTA_Height (ULONG) -- Height of a frame in pixels.
Applicability is (ISG).
ADTA_Depth (ULONG) -- Depth of the frame.
Applicability is (ISG).
ADTA_Frames (ULONG) -- Number of frames in animation.
Defaults to 0,
setting this attribute also affects ADTA_FrameIncrement
(e.g. set it's to 10 except if ADTA_Frames < 50, then
ADTA_FrameIncrement = ADTA_Frames / 5).
Applicability is (ISG).
ADTA_Frame (ULONG) -- Currect frame
Setting of this attribute causes an ADTM_LOCATE !
Applicability is (G).
Applicability is (SGU) (V41)
ADTA_FramesPerSecond (ULONG) -- Number of frames per
second to play.
V40 limits this to 60 fps, V41 increases the limit up to
1200 fps (max. realtime.library resolution).
(Setting this tag may also affect the default value for
ADTA_NumPrefetchFrames.)
Defaults to 10.
Applicability is (ISG).
ADTA_TicksPerFrame (ULONG) -- realtime.library ticks per frame
Defaults to TICK_FREQ / 10 = 120
(Setting this tag may also affect the default value for
ADTA_NumPrefetchFrames.)
Applicability is (ISG) (V41).
ADTA_CurrFramesPerSecond (ULONG) -- current frames per second rate
The playback rate and sound playback speed are recalculated
to match this value.
If ADTA_AdaptiveFPS is TRUE, this value is recalculated to
allow the maximum available playback speed on the hardware
(limmitted by ADTA_FramesPerSecond)
Applicability is (ISGU) (V41).
ADTA_CurrTicksPerSecond (ULONG) -- current ticks per second rate
The playback rate and sound playback speed are recalculated
to match this value.
If ADTA_AdaptiveFPS is TRUE, this value is recalculated to
allow the maximum available playback speed on the hardware
(limmitted by ADTA_TicksPerSecond)
Applicability is (ISGU) (V41).
ADTA_FrameIncrement (ULONG) -- Amount to change frame by when fast
forwarding or rewinding.
Defaults to 10
Applicability is (G).
Applicability is (SGU) (V41)
ADTA_BitMapHeader (struct BitMapHeader *) -- Set and get the
base information for the animation. BitMapHeader is defined in
<datatypes/pictureclass.h>
Setting this tag causes the given struct BitMapHeader to be copie
d
into the object.
This also causes ADTA_Width, ADTA_Height, ADTA_Depth to be set.
Applicability is (G).
Applicability is (ISG) (V41)
ADTA_Sample (BYTE *) -- Pointer to sample data.
Applicability is (ISG).
ADTA_SampleLength (ULONG) -- Length of sample data.
Applicability is (ISG).
ADTA_Period (ULONG) -- Period to play back sample at.
Defaults to 360.
Applicability is (ISG).
ADTA_Volume (ULONG) -- Volume to play back sample at.
Defaults to 64.
Applicability is (ISG).
Applicability is (ISGU) (V41).
ADTA_Cyles (ULONG) -- Cycles to play.
Defaults to 1.
Applicability is (G).
ADTA_AdaptiveFPS (BOOL) -- If TRUE, the playback rate is limitted
to the maximum reachable playback rate without frame skipping.
Defaults to TRUE, but maybe changed using the prefs-file (V41).
ADTA_SmartSkip (BOOL) -- If TRUE, some frames are skipped based
on internal statistics to keep playback and sound in sync.
Defaults to FALSE, but maybe changed using the prefs-file (V41).
ADTA_NumPrefetchFrames (ULONG) -- Number of frames to be
prefetched by the loading process.
Must be at least 5, lower values are bumped to 5.
Defaults to 1/2 fps value unless set explicietly by OM_SET or
using the prefs-file (V41).
ADTA_OvertakeScreem (BOOL) -- Overtake screen palette when not
remapping.
Applications should set this explicitly to FALSE if they don't
want to be affected by this datatype.
Defaults to TRUE, but maybe changed using the prefs-file (V41).
BUGS
Horrors. This version (V41.6) suffers under the 1001
nightmare bugs problem:
After all, I think the current version has the following bugs:
- The CPU blitter support is currently broken. Instead of doing
a small speed comparisation between OS blitter and CPU blitter
the CPU blitter is enabled on a mc68030 per default if remapping
is required.
Who likes to use the CPU blitter evertimes (if the subclass decoder
creates planar output), set explicitly the CPUBLITTER switch in the
prefs file, to turn off the CPU blitter evertimes is the OSBLITTER
option.
- timing may be slightly inaccurate. On a rate of 10 fps, this
isn't bad, but using fps >= 1 or lower (e.g.
ADTA_TicksPerFrame > 1200), you may see the problem.
- ADTA_OvertakeScreen does not work correctly. Currently it is
always set to TRUE.
- Internal statistics (for ADTA_AdaptiveFPS, ADTA_SmartSkip etc.)
are working now, but the wheighting of loading and display time
can be made better.
- ADTA_SmartSkip code has been disabled.
- CyberGFX code has been disabled because it isn't tested yet.
- Incompatible with the current V41.11 cgxsystem.library
PLANES2FAST option, because the GetBitMapAttr function does not
BMF_STANDARD flag and then animation.datatype treats the bitmaps
as non-planar, which cannot be remapped.
- planar bitmaps with depth > 8 are not supported yet, sorry.
- tapedeck.gadget handling is very tricky, and may have some
problems.
- On a highly loaded system the animation playback can't be
stopped on the fly (IPC communication has problems with this).
This happens often when DTA_Repeat is set, and the
ADTM_STOP, ADTM_START cycle occurs to rewind the animation.
- IPC communication is __VERY__ complex. We have 5 (!) threads
to be controlled and sync'ed:
- loader process
- display and control process
- input.device
- application process
- realtime.library player interrupt
Don't expect that all works fine here...
- DTA_Repeat == TRUE does not work with anims with less than 3
frames, because the first frame is skipped.
This causes problems with (for example) 2 frame gif animations.
- ADTA_NumSpase and ADTA_SparseTable does not work yet, sorry.
TODO
- In HAM-mode, a box of color 0 should be drawn around the object
to avoid some ugly HAM-effects when the background of the parent
window is not 0.
(Idea was taken from "cdgsxl").
- Remapping code HAM -> 24-bit
- Remapping code EHB -> Other amiga modes
- Support for non-planar bitmap types (chunkypixel etc.).
- Support for 12/15/16/18/21/24-bit planar bitmaps (direct-RGB
coded).
- Get some more info about the mysterious tapedeck.gadget.
- The CBM OS 3.1 tapedeck.gadget is limited to a height of 16
pixels. If I have time, I can write my own version WITHOUT this
limitation...
HISTORY
V41.1
- Initial release to DataTypes Mailinglist
V41.2
- Recompiled with SAS/C 6.58; this may fix mc68060 related
problems.
- Now the tapedeck update is slightly better because a "magic"
update (using a gpr_Redraw of 100 instead of GREDRAW_UPDATE)
is used.
Thanks to Heinz Wrobel.
- Fixed the bug that after resizing the parent window the
height of the playback area was not restored.
Fixed.
- If the display screen is not visible, the old V40.6 turns
of the bitmap display (using the VP_HIDE flags).
Now V41 does the same.
Thanks to Heinz Wrobel for explaining this. Because this
may be a hack (not documented by the OS docs), this
feature is turned off if the NOHACKS switch is set in the
prefs file.
- Fixed internal statistics (used for adaptive playback rate
calculations). Now the datatype tracks time-to-unload-a-frame,
too.
- Fixed a problem with adaptive playback rate selection
and dynamic timing. The new model seems to run more smoothly,
but this is still a weak point.
- Recompiled the project with DATA=FARONLY. I think that this
should fix some problems.
Thanks to Steve Krueger (sekruege@nando.net) for answering
some questions.
- Moved OS vs. CPU blitter selection code from GM_LAYOUT
to the first GM_RENDER after GM_LAYOUT. This should be more
reliable, and speeds up the initial window layout a little
bit.
- Seems that there is a bug in the CPU blitter (selection) code.
For now I wrote a small workaround; the CPU blitter is
enabled per default on a mc68030 if ADTA_Remap is set to TRUE
(assuming that the cpu blitter function running on a mc68030 is
a little bit faster than the OS blitter).
- Updated the autodocs.
- OM_DISPOSE now preserves result2 (e.g. IoErr() result)
explicitly.
- OM_DISPOSE now sets the embedded sound.datatype object's
SDTA_Sample to NULL. This fixes possibly problems if a
sound.datatype clone tries to FreeVec' the sample...
- Removed code from OM_DISPOSE which is executed in
DTM_REMOVEDTOBJECT (e.g. freeing of pens and tmp. bitmaps).
- Now OM_GET ADTA_Sample, ADTA_SampleLength, ADTA_Period,
ADTA_Volume and ADTA_Cycles are got from the current frame.
This feature should work now.
- Implemeted OM_GET ADTA_DestFrame (alias PDTA_DestBitMap). Note
that accessing this bitmap is ONLY safe when the object does not
do any playback; the same rule must be respected for
ADTA_Sample, ADTA_SampleLength and ADTA_Period.
- Added CBM cdxl.datatype compatibility hack (I'm __very__ angry
about this problem because it took a long time to find the
problem). It seems that CBM's cdxl.datatype requires that it's
instance data are on long-word boundary because the data starts
with a FileInfoBlock.
Don't rely on this feature !!!
- If the object setup (OM_NEW) failed in a sub-process, the error
code is now passed to the parent process and there stored
in Result2. This includes realtime.library errors, too.
- Now uses AllocPooled and an internal memory management to
avoid memory allocations whereever and whenever possible.
- Internal divisions are now rounded when usefull.
- Child processes are now starting in sequence instead of a
parallel setup. This is only for testing; later I'll write the
parallel setup again.
- Fixed the bug that GM_RENDER with GREDRAW_REDRAW didn't work
properly if the parents box was only changed of one of X- OR
the Y-axis (e.g. EraseRect wasn't done in this case).
- Fixed the bug that tapedeck.gadget was drawn even if the
DTA_Domain height was below GA_Height (tapedeck.gadget can't
clip in Y-direction).
This fixes visual problems with embed.datatype.
The check is also made in GM_HITTEST, GM_HELPTEST and
GM_GOACTIVE.
- If DTA_ControlPanel is FALSE and the mouse SELECTUP starts the
playback, a following mouse SELECTUP now pauses the playback.
- The stack swapping code now allocates it's memory without
MEMF_CLEAR, which should result in a small speedup when doing
things.
- The library base now has 16 reserved lvo entries after
ObtainEngine which returns all 0 for now.
All these entries are reserved and private for now.
- DTM_REMOVEDTOBJECT now passes the msg to superclass after doing
it's work. This fixes problems with some datatypesclass
internals.
Fixed.
- DTM_FRAMEBOX now passes the msg to superclass before doing
it's work. Now datatypesclass can release the input clipboard
which avoids that the clipboard unit is locked while the object
exists.
Fixed.
- Fixed the bug that setting ADTA_ModeID to INVALID_ID caused
havoc in the object (remapping code got turned off, the
palette of a public screen was changed etc.).
Now a ADTA_ModeID of INVALID_ID is treated as a 0UL mode id.
Thanks to Francis Labrie (fb691875@er.uqam.ca) for reporting
the bug.
Fixed.
- Fixed the bug that when the CPU blitter draws the display, a
GM_RENDER showed the first frame. Now a GM_RENDER and other
methods sync's the ADTA_DestFrame bitmap correctly (e.g. copy
the (remapped) src bitmap) into ADTA_DestFrame) before using it.
Fixed.
- Changed some internals that moving the tapedeck.gadget's slider
causes less overhead when loading single frames.
- Now the animation.datatype instance data contents are on a
long-word aligned boundary, which should speed up some things.
(Tested only with Kick 3.0 yet).
- Fixed a bug in the ADTA_OvertakeScreen code that caused that
the last color in a palette change was set to black instead
of the wanted color.
Fixed.
V41.3
INTERNAL RELEASE
- Fixed the bug that a non-planar (chunky) bitmaps wasn't passed
througth.
- Improved internal GetPictureCopy (which is used to create the
temp. object for DTM_COPY, DTM_WRITE, DTM_PRINT):
- It now uses the key bitmap as a friend bitmap parameter.
This may fix problems when processing non-planar bitmaps.
WARNING: This may result in large problems if a < V43
picture.datatype is used in a GFX-card environment (CyberGFX,
Picasso 96 etc.).
- It now does not attempt to copy a colormap if is
ADTA_NumColors == 0 (added this check to avoid some
unneccesary memory copies which result all in a big NOP is
this case).
- Reduced the memory usage if non-planar input bitmaps are used
by the subclass (the temporary bitmaps used for remapping etc.
are not allocated (because they were not used...)).
- Tests have shown that the PLANES2FAST option of
cgxsystem.library V41.11 is incompatible with animation.datatype
because the GetBitMapAttr function does not set BMF_STANDARD for
these bitmaps even if they are planar.
This causes that the bitmaps are treated as chunkypixel ones
(where the remapping code can't touch them).
Cannot be fixed yet.
V41.4
Version for the "Compuler 97'" fair in Colone/Germany
- Replaced the custom stack swapping code by my "standard" module
- Fixed the bug that a failed palette allocation (e.g. setting of
ADTA_NumColors) return random values for the ADTA_CRegs,
ADTA_ColorRegisters etc. attributes if it was set more than once
in objects lifetime and the allocation failes.
The attributes now return correctly NULL in this case.
Fixed.
- If ADTA_NumColors is set to 0, now ADTA_CRegs,
ADTA_ColorRegisters, ADTA_GRegs etc. return a NULL pointer
instead of returning random values.
- Minor code cleaup.
- Oops, the last distribution missed the
"datatypes/animationclassext.h" include file.
V41.5
- Fixed a bug that some things (like internal CopyBitMapPlanar)
only worked if the object has been added to the display.
Fixed.
- Fixed the bug that the alf_Duration field wasn't respected for
ADTM_LOCATE and the first frames played back by ADTM_START.
Fixed.
- Enabled the remapping code for 8-bit chunkypixel bitmaps.
This also fixes the problem with CyberGFX that planar bitmaps
in are not detected in CGFX PLANES2FAST mode (but there a still
a couple of bugs...).
Should work now...
- Fixed the bug (in theory, but it does never happen) that the
load process did not clear some internal flags on exit
which may cause deadlocks if an application fires ADTM_START
after the object has been removed from display (which
is illegal, but...).
Fixed.
- Major changes in the IPC communication and timing parts.
Main reason was to reduce the delay gap caused by a repeat
rewind (if DTA_Repeat is TRUE).
- OM_GET ADTA_Sample, ADTA_SampleLength, ADTA_Period
refers to the current frame, if there is no current frame
the attributes refers to the first frame.
The "feature" introduced in V41.2 to get the "current"
values from the sound.datatype object wasn't very usefull
because CBM's sound.datatype did not support OM_GET for these
attributes.
V41.6
- Fixed the bug that STM_LOCATE did not work properly. The
DTA_TriggerMethods info says that "Locate" is
(STM_LOCATE | STMD_ULONG), but the trigger command dispatcher
checked the old STM_LOCATE (without the STMD_#? flag).
Now the trigger command dispatcher masks the trigger method
using ((trigger_method) & ~STMF_DATA_MASK) to get rid of the
STMD_#? info...
Fixed.
- Added SHARECHIP / NOSHARECHIP options. Before V41.6, the
animation.datatype tests incoming planar bitmaps of they lie in
chipmem can can be passed to BltBitMapRastport directly without
using a copy to a chipmem buffer.
Now this test is avoided unless the SHARECHIP option is on
again. The prefs docs about this option explains why this may be
good in certain cases...
- tapedeck.gadget's special GM_RENDER mode 100 (GREDRAW_SLIDER, e.g
.
only update embedded slider) is never more treated as an hack.
- Small speedup because tapedeck's rastport using for
GM_RENDER/GREDRAW_SLIDER is now set up at GM_LAYOUT time
instead of a once-pre-draw setup.
- The 8-bit-chunkypixel remapping code has been re-written.
It now remaps RPL8 / remap / WPL8 instead using a RPA8 / remap /
WPA8 cycle (the line-by-line should be more cache-friendly and
therefore faster...).
The memory needed for this remapping is also reduced
significantly...
- The 8-bit-chunkypixel remapping code never more checks
for the return codes of RPL8/RPA8 nor WPL8/WPA8.
It seems that the GFX-Card driver software sometimes returns
rubbish here...
Should fix some reported blank displays...
- Added support for FIF_ABILITIES (bit 31, (0x80000000UL)).
This flag indicates that animation.datatype supports the
FIF_#? flags. "GMultiView" for example now looks on this
flag and is able to show a HAM/EHB animation on a public
screen if we support the remapping for it.
- Fixed the bug that DTM_TRIGGER did not send
DTERROR_COULDNT_SEND_MESSAGE in the case of no receiver.
Fixed.
- Now SAS/C's build-in math functions are used instead of
the C macros...
- Changed the default value of ADTA_NumPrefetchFrames.
Instead of 10 frames to prefetch now (1/2 fps) number of
frames will be pre-fetched during loading.
Setting ADTA_NumPrefetchFrames explicitly by OM_SET or
by the prefs-file will turn this automatic selection off
again...
This may give a more reasonable default value for
mpegvideo.datatype's NOLOADALL mode...
- Fixed the bug in OM_NEW that if realtime.libary/CreatePlayerA
failed with an PLAYER_ErrorCode error not of RTE_NOMEMORY or
RTE_NOCONDUCTOR Result2 (IoErr) was set to 0.
Due lack of a good dos.library error code if've set the
code to 1234L for now.
Fixed.
- Small modifications in the code which may caused problems with
animations with more than 16384 pixel width and/or height.
These dimensions are currently therorectical, but:
Fixed.
- DTM_REMOVEOBJECT now causes that all queuing frames in the
display queue are disposed (e.g. moved to the dispose queue).
This avoids the bug that removing the object from a window
and re-attaching it again may cause that next play cycle will
display these frames first.
Fixed.
- The priority of the display and load processes are now set up
based on the parent process priority (e.g. the process which
executes OM_NEW).
The display process gets parent process priority, the load
process gets "parent priority - 1".
This allows to run the playback at higher priorities.
- { GA_Immediate, TRUE } is not set any more for the
tapedeck.gadget. This seems to fix some problems with input
processing from tapedeck.gadgets.
- Fixed the bug that tapedeck.gadget's TDECK_CurrentFrame attribute
wasn't updated if DTA_ControlPanel is set to TRUE.
Fixed.
- ADTM_START now clears the load queue explicitly if the first
frame in the queue matches not the given "asa_Frame".
SEE ALSO
mpegsystem.datatype, mpegvideo.datatype,
picmovie.datatype,
cdxl.datatype. avi.datatype, quicktime.datatype,
moviesetter.datatype,
film.datatype
THANKS TO
David Junod for the design and the first implemenation,
Olaf Barthel for his great help,
Heinz Wrobel for explaining some things.
Frank Mariak for his CPU blitter replacement and CyberGFX support,
Niels Froeling for the planar remapping code,
and the people of the DataTypes Mailing list for testing and their
help
animation.datatype/--model-- animation.datatype/--model--
MODEL
<The following has not been finished yet. It's only a first, small,
poorly, genernal overview about the used model>
The following short text should describe how the animation.datatype
works (in general):
The animation.datatype is split up in four parts:
1. the decoder (the subclass which sits on animation.datatype)
2. the loading process
3. the display and control process
4. a realtime.library Player (timing interrupt)
5. a control process (application process, or input.device)
1. The Decoder
The decoder part belongs completely to the subclass (sitting on
animation.datatype). animation.datatype communicates through
methods (ADTM_START, ADTM_PAUSE, ADTM_STOP, ADTM_LOCATE,
ADTM_LOADFRAME and ADTM_UNLOADFRANE) with the subclass.
Mainly, ADTM_LOADFRAME and ADTM_UNLOADFRAME are used to load/unload
a frame from the subclass.
2. The Loading Process
The loading process has a simple task: Load as much frames as
possible and store the frames into a "frame queue".
The idea is that the loading process (which runns at a lower
priority than the display process) consumes all CPU time which is
not used by the display process.
The load process is controlled by the display and the control
process (the application., for example), which can set one of
the following modes for the load process:
a) preload: Load the next 10 (can be changed by the prefs-file)
frames, then stop.
b) play: Fill the "frame queue" until it is full (e.g. until
it reaches 10 frames or more).
c) stop: Stop loading and preloading
d) flush: flush frame queue
3. The Display Process
The display process is responsible for remapping and displaying
of frames during playback. If signalled by the realtime.library
Player, the display process gets the first frame from the frame
queue, remapps it (if neccesary) and displays it. If a sample
is attached to the frame, the sample is fed to the embedded
sound.datatype object.
4. The realtime.library Player (Timing Interupt)
The player has the job to decrase a counter each 1/1200 sec.
If the counter reaches 0, it is time to display the next frame,
and the interrupt fires a signal to the display process to
trigger the display of the frame.
5. The Control Process
There is no fixed control process. But the application is allowed
to send ADTM_START, ADTM_PAUSE, ADTM_STOP and ADTM_LOCATE to
trigger a playback, pause or stop it - or locate a single frame.
The same counts for the user, who plays with the embedded
tapedeck.gadget.
animation.datatype/ADTM_LOCATE animation.datatype/ADTM_LOCATE
NAME
ADTM_LOCATE -- Locate a frame
FUNCTION
ADTM_LOCATE locates a frame and displays it.
RESULT
Returns non-zero on success,
0UL on failure.
NOTE
animation.datatype/ADTM_PAUSE animation.datatype/ADTM_PAUSE
NAME
ADTM_PAUSE -- Pause an animation playback
FUNCTION
ADTM_PAUSE pauses an animation playback.
If the playback is currently active, it will be paused, then the
sound is turned off. The load process is turned off, too.
RESULT
Non-zero if the playback has been turned off successfully.
0UL if on error (object is not attached to a window etc.).
NOTE
- This method MUST be passes to the super-class (animation.datatype)
before the sub-class pauses !
- Subclasses can treat this method like ADTM_STOP. Unlike
ADTM_STOP, a subclass should not reset any frame counter
(or Seek to any other file position, for example), because
in the most cases the playback starts again at this position.
animation.datatype/ADTM_START animation.datatype/ADTM_START
NAME
ADTM_START -- Start animation playback
FUNCTION
ADTM_START starts the animation playback.
First the timer is reset to the current frame. If the load process
is inactive, it will be activated; this method waits until
a preload cycle is done.
Then the timer is activated and sound will be turned on.
Starting with V41, this method is a NOP when the object is not
attached to a window/requester (this allows custom players
to use ADTM_START and the subclass optimisations made in a
ADTM_START / ADTM_STOP cycle).
RESULT
Returns Non-Zero if playback has been started successfulls.
Returns 0UL on failure (e.g. objectnot attached to a window etc.)
NOTE
- Subclasses can use ADTM_START to optimize playback. Starting
with ADTM_START and ADTM_PAUSE/ADTM_STOP, a continous range
of frames is read by the loading process.
A common example usage (in a subclass) is to send the first
read-packets (for the timstamp given in adtStart -> asa_Frame)
asyncrounous to the filesystem.
Don't wait for the packets ! ADTM_LOADFRAME should do this.
- Subclasses must prepare for playback BEFORE passing
this msg to animation.datatype, because the loading process will
immediately start loading.
- Subclasses MUST NOT hold any locks which are also locked in
ADTM_LOADFRAME / ADTM_UNLOADFRAME when passing ADTM_START to
animation.datatype. This causes a deadlock because the process
which is running ADTM_START will wait until the load process
has finished it's playback, but the load process is waiting
for the semaphore which is locked by the ADTM_START process.
- Starting with V41, this method gurantees that the playback
has been started on exit.
- Starting with V41, this method is safe when the object is
not attached to a window.
animation.datatype/ADTM_STOP animation.datatype/ADTM_STOP
NAME
ADTM_STOP -- Stops an animation.datatype playback
FUNCTION
ADTM_STOP stops an animation playback.
If the playback is currently active, it will be stopped, then the
sound is turned off. The load process is turned off, too.
RESULT
NOTE
- This method MUST be passes to the super-class (animation.datatype)
before the sub-class stops !
- Starting with V41 this method gurantees that the playback has
been stopped on exit.
animation.datatype/DTM_COPY animation.datatype/DTM_COPY
NAME
DTM_COPY -- Copy current frame to primary clipboard unit
FUNCTION
DTM_COPY copies the current frame as an IFF ILBM frame to the
primary clipboard (unit 0).
Starting with animation.datatype V41, this method creates a
temporary picture.datatype object, which will be fed with
bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
method is passes to the picture.datatype object.
Before V41, animation.datatype used it's own clipboard saving code.
RESULT
The return code from the picture.datatype object.
NOTE
SEE ALSO
picture.datatype/DTM_COPY
animation.datatype/DTM_FRAMEBOX animation.datatype/DTM_FRAMEBOX
NAME
DTM_FRAMEBOX -- Get/or set the object's environment
FUNCTION
The DTM_FRAMEBOX method is used to set or get the object's
environment.
The FRAMEF_SPECIFY flag defines the mode of this method.
If FRAMEF_SPECIFY is not set the object returns it's preferred
(optimum) enviroment in dtf_FrameInfo (output).
If FRAMEF_SPECIFY is set, the application tells the object
about it's destination environment (got from dtf_ContentsInfo);
animation.datatype does nothing here (NOP), but a subclass can use
this to select a matching dither mode or select the best-matching
stream (in multi-stream animations like MPEG-2).
RESULT
Returns non-zero for success, 0 for failure (NOP).
NOTE
animation.datatype/DTM_PRINT animation.datatype/DTM_PRINT
NAME
DTM_PRINT -- Print current or specified frame to file.
FUNCTION
DTM_PRINT prints the current or a specifed frame as an IFF ILBM
picture to the printer.
Starting with animation.datatype V41, this method creates a
temporary picture.datatype object, which will be fed with
bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
method is passes to the picture.datatype object.
Before V41, animation.datatype used it's own printer code.
TAGS
ADTA_Frame (ULONG) -- (V41) Timestamp of the frame to print.
Defaults to the current frame.
DTA_RastPort, DTA_DestCols, DTA_DestRows and DTA_Special
are also recognised by the picture.datatype DTM_PRINT code.
See picture.datatype/DTM_PRINT or datatypesclass autodoc.
RESULT
The return code from the picture.datatype object.
BUGS
- DTA_SelectDomain is ignored in V41 (as the whole DTM_SELECT
code is not working yet).
NOTE
SEE ALSO
picture.datatype/DTM_PRINT
animation.datatype/DTM_PROCLAYOUT animation.datatype/DTM_PROCLAYOUT
NAME
DTM_PROCLAYOUT -- Layout an animation.datatype object on applications
process
FUNCTION
<not written yet, sorry>
RESULT
NOTE
animation.datatype/DTM_REMOVEDTOBJECT animation.datatype/DTM_REMOVEDTOBJECT
NAME
DTM_REMOVEDTOBJECT -- Release all window/screen related resources
FUNCTION
DTM_REMOVEDTOBJECT is used to remove a animation.datatype object
from screen context. The playback is stopped (using ADTM_STOP),
then all resouces allocated in the initial GM_LAYOUT are freed.
This includes shared or exclusive pens allocated, temporary bitmaps
etc.
After all, the method is passed to superclass.
After using this method, the object is removed from screen's context
and can be re-used in another screen.
RESULT
Returns return value from superclass.
NOTE
This method is normally invoked from within
datatypes.library/RemoveDTObject. Manual usage is only neccesary
where AddDTObject wasn't used (see embed.datatype for example).
animation.datatype/DTM_TRIGGER animation.datatype/DTM_TRIGGER
NAME
DTM_TRIGGER -- Trigger an action
FUNCTION
Trigger an asyncrounous (!) action on the object.
Supported are:
Label | Command | Function | Parameters
----------------+-----------+-------------------------+------------
"Pause" | "PAUSE" | STM_PAUSE | STMD_VOID
"Play" | "PLAY" | STM_PLAY | STMD_VOID
"Rewind", | "REWIND" | STM_REWIND | STMD_VOID
"Fast Forward" | "FF" | STM_FASTFORWARD | STMD_VOID
"Stop" | "STOP" | STM_STOP | STMD_VOID
"Locate" | "LOCATE" | STM_LOCATE | STMD_ULONG
- Pause
Pauses the current playback.
The control process simply does a ADTM_PAUSE here.
- Play
Start playback
- Rewind
Skips ADTA_FrameIncrement frames back
- Fast Forward
Skips ADTA_FrameIncrement frames forward
- Stop
Stops the current playback.
The control process simply does a ADTM_STOP here.
- Locate
The given parameter (dtt_Data; treated as ULONG) is used as the
frame number (or timestamp) to locate (e.g. load and display this
frame). This is simmilar to ADTM_LOCATE (but this isn't done here
yet).
Be sure to look at datatypes.library/GetDTTriggerMethodDataFlags to
check whether a trigger method requires an argument or not !
RESULT
Returns non-zero for success,
0 for failure (and result2 set to the cause:
ERROR_NO_FREE_STORE - no memory
DTERROR_COULDNT_SEND_MESSAGE - object not ready to send (should NOT
occur)
ERROR_ACTION_NOT_KNOWN - unknown STM_#? type
BUGS
- The given STM_#? type is not checked if it is supported or not.
NOTE
- Once again: This method is asyncrounous. You cannot assume
that the triggered action is started nor finished after
DTM_TRIGGER returns.
- Common usage is a button field or a menu item to let the user
to some actions on the object.
SEE ALSO
datatypes.library/GetDTTriggerMethodDataFlags
animation.datatype/DTM_WRITE animation.datatype/DTM_WRITE
NAME
DTM_WRITE -- Copy current or specified frame to file.
FUNCTION
DTM_WRITE copies the current or a specifed frame as an IFF ILBM
picture to the given filehandle.
Starting with animation.datatype V41, this method creates a
temporary picture.datatype object, which will be fed with
bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
method is passes to the picture.datatype object.
Before V41, animation.datatype used it's own saving code.
TAGS
ADTA_Frame (ULONG) -- (V41) Timestamp of the frame to save.
Defaults to the current frame.
RESULT
The return code from the picture.datatype object.
NOTE
- Subclasses may implement ADTA_Frame, ADTA_Frames and
ADTA_FrameIncrement for their own encoders.
SEE ALSO
picture.datatype/DTM_WRITE
animation.datatype/GM_GOACTIVE animation.datatype/GM_GOACTIVE
NAME
GM_GOACTIVE -- Activate an animation.datatype gadget
FUNCTION
The GM_GOACTIVE method is used to indicate to a gadget that it has
become active. This method overrides the superclass.
See also GM_HANDLEINPUT, because this method is exactly the the
same except the following things:
- If the gpInput message mouse position is over the tapedeck.gadget
it will become the active member (unless it has GA_Disabled == TRUE
set for any reason).
RESULT
See GM_HANDLEINPUT
NOTE
animation.datatype/GM_GOINACTIVE animation.datatype/GM_GOINACTIVE
NAME
GM_GOINACTIVE -- Decativate an animation.datatype object
FUNCTION
The GM_GOINACTIBE method is used to indicate that the
animation.datatype gadget has become inactive. This method overrides
the superclass.
If the embedded tapdeck.gadget was active, this method
will be passed to it.
RESULT
The return code from the superclass is returned.
NOTE
animation.datatype/GM_HANDLEINPUT animation.datatype/GM_HANDLEINPUT
NAME
GM_HANDLEINPUT -- Process gadget input events
FUNCTION
The GM_HANDLEINPUT method is used to handle te input events of an
active animation.datatype gadget. This method overrides the
superclass.
If there is an active member (currently only tapedeck.gadget),
all messages are passed througth to it.
If there is no tapedeck.gadget in the display (e.g. DTA_ControlPanel
== FALSE) and the object is not playing, a mouse SELECTUP starts
the playback. If the object is playing, a SELECTUP pauses the
playback.
RESULT
Do not interpret the results here, due they're a result of private
internal activity.
A later version will define here valid values.
NOTE
animation.datatype/GM_HELPTEST animation.datatype/GM_HELPTEST
NAME
GM_HELPTEST -- Test if object has been hit by a help request
FUNCTION
The GM_HELPTEST method is used to determine if the given mouse
coordinates are within the help domain of the animation.datatype
gadget.
This method overrides the superclass.
If the mouse position is over the embedded tapdeck.gadget, this
method is passed to it.
RESULT
GMR_HELPHIT or the return value of the embedded tapedeck.gadget
NOTE
animation.datatype/GM_HITTEST animation.datatype/GM_HITTEST
NAME
GM_HITTEST -- Test if object has been hit by mouse
FUNCTION
The GM_HITTEST method is used to determine if the given mouse
coordinates are within the domain of the animation.datatype gadget.
This method overrides the superclass.
If the mouse position is over the embedded tapdeck.gadget, this
method is passed to it.
RESULT
GMR_GADGETHIT or the return value of the embedded tapedeck.gadget
NOTE
animation.datatype/GM_LAYOUT animation.datatype/GM_LAYOUT
NAME
GM_LAYOUT -- Layout an animation.datatype object
FUNCTION
<not written yet, sorry>
RESULT
Returns return value from superclass.
NOTE
animation.datatype/GM_RENDER animation.datatype/GM_RENDER
NAME
GM_RENDER -- Render an animation.datatype gadget
FUNCTION
The GM_RENDER method is used to render an animation.datatype object
with the current frame. This method is also passed to the embedded
tapedeck.gadget if DTA_ControlPanel is TRUE and if there is enougth
space to render it (currenty a domain height < 16 pixels causes the
tapedeck.gadget not to be rendered)
. This method overrides the superclass.
If this is the first GM_RENDER/GREDRAW_REDRAW after the initial
GM_LAYOUT and DTA_Immediate was set to TRUE, the playback is
started here.
RESULT
This method returns 0.
NOTE
animation.datatype/MAIN animation.datatype/MAIN
INTRODUCTION
animation.datatype is the datatypes base class for all animation
and movie subclasses. It is responsible for remapping, sound,
scronisation, creating the controls and misc. other things
FEATURES
- Supports now the full animation.datatype interface like defined
in include31:datatypes/animationclass.h:
- Supports palette-per-frame, e.g. each frame can have it's own
palette.
- Dynamic timing. A frame can have a variable duration until
the next frame occurs.
- Fully compatible to the original animation.datatype V40.7
- Configurable througth a preferences file.
- Includes a CPU blitter for planar screens. If enabled by the prefs
file, animation.datatype uses a CPU blitter instead of the OS
blitter.
- CyberGFX compatible:
- Now animation.datatype V41 can handle non-planar bitmaps, e.g.
chunkypixel bitmaps, as input.
(Currently they cannot be remapped, the bitmaps are displayed
unchanged on the destination screen).
- Supports HAM/EHB -> 24-bit remapping. (TEMPORARY DISABLED).
- No skipping anymore. The aniation.datatype V41 introduces
a new feature called "adaptive frame rate selection". Instead
of skipping frames when they cannot be displayed in real-time,
the FPS rate is now adapted to fit (e.g. the maximum available
playback speed without skipping).
REQUIREMENTS
- You need at least Kick/WB 3.0.
- "realtime.library", >= V39 - for timing
- "gadgets/tapedeck.gadget" (any version) - for the controls
You need "sound.datatype" >= V40 for sound support.
USAGE
Usage is very simply: If you have loaded an animation, you can
control the animation using the tapedeck gadget at the bottom:
"<<" skips some frames back
">" starts playing
">>" skips some frames forward.
The slider part can be used to move manually to a specific
postion in the animation/movie.
Note that there is also a prefs-file where you can set various
options. See "preferences" section for details.
INSTALLATION
After unpacking this archive:
Because this version does not include an Installer script, you have
to do the installation manually through the shell:
- Unpack this archive and copy the "animation.datatype" to
SYS:Classes/DataTypes/:
Copy CLONE FROM "animation.datatype" TO
"SYS:Classes/DataTypes/animation.datatype"
AUTHOR
If you want to blame me, report any bugs, or wants a new version
send your letter to:
Roland Mainz
Hohenstaufenstraße 8
52388 Nörvenich
GERMANY
Phone: (+49)(0)2426/901568
Fax: (+49)(0)2426/901569
EMAIL is also available (if you want to send me attachments
larger than 1MB (up to 5MB, more with my permission):
GISBURN@w-specht.rhein-ruhr.de
Up to April 1998 I'm reachable using this email address, too:
Reinhold.A.Mainz@KBV.DE
| Please put your name and address in your mails !
| German mailers should add their phone numbers.
| See BUGS section above when submitting bug reports.
Sorry, but I can only look once a week for mails.
If you don't hear something from me within three weeks, please
send your mail again (but watch about new releases) (problems with
this email port are caused by reconfigurations, hackers, network
problems etc.).
The entire "animation.datatype" package may be noncommercially
redistributed, provided that the package is always distributed
in it's complete form (including it's documentation). A small
copy fee for media costs is okay but any kind of commercial
distribution is strictly forbidden without my permission !
Comments and suggestions how to improve this program are
generally appreciated!
Thanks to: See "--datasheed--/THANKS TO" section...
animation.datatype/ObtainAnimationEnginemation.datatype/ObtainAnimationEngine
NAME
ObtainAnimationEngine -- Obtain the pointer to the animation class.
SYNOPSIS
class = ObtainAnimationEngine();
d0
struct IClass *ObtainAnimationEngine( void );
FUNCTION
This function is used to obtain the pointer to the class
structure for this public BOOPSI class.
RETURNS
Returns a pointer to a valid public BOOPSI class pointer.
NOTE
- This function is also known as ObtainEngine. See
"include31:clib/dtclass_protos.h"
- Starting with V41, animation.datatype has a struct ClassLibrary
structure (see V42 "include:intuition/classes.h") in it's
classbase, where the BOOPSI class pointer can be obtained from.
This method should be preferred over ObtainAnimationEngine.
animation.datatype/OM_DISPOSE animation.datatype/OM_DISPOSE
NAME
OM_DISPOSE -- Dispose aniation.datatype class instance
FUNCTION
This method disposed all animation.datatype instance related
rousources, including the tapedeck.gadget, the player etc.
RESULT
Returns the return value of the superclass.
NOTE
animation.datatype/OM_GET animation.datatype/OM_GET
NAME
OM_GET -- Get the value of an attribute
FUNCTION
The OM_GET method is used to get a value of an attribute.
<not fully written yet, sorry>
ADTA_DestFrame (struct BitMap *) (V41) -- current remapped frame
(the matching palette can be found in ADTA_GRegs).
Note that reading this attribute is only save when the object
is NOT playing.
ADTA_Sample (UBYTE *) (V41) -- current frame's sample.
Note that reading this attribute is only safe when the object
is NOT playing.
ADTA_SampleLength (ULONG) (V41) -- current frame's sample length.
Note that reading this attribute is only safe when the object
is NOT playing.
ADTA_Period (ULONG) (V41) -- current frame's sample period.
Note that reading this attribute is only safe when the object
is NOT playing.
ADTA_Volume (ULONG) (V41) -- global volume.
ADTA_Cycles (ULONG (V41) -- fixed to 1
RESULT
Returns non-zero on success, 0 on failure (attribute not recognized
by OM_GET).
NOTE
animation.datatype/OM_NEW animation.datatype/OM_NEW
NAME
OM_NEW -- Create a new animation.datatype object
FUNCTION
The OM_NEW method is used to create an instance of the
animation.datatype class. This method is passed to the superclass
first. After this, it sets up the instance data, creates sound
and tapedeck objects, and the load and display processes. After
all, when the object and the embedded objects and threads are
ready for action, this method returns.
On error this method calls OM_DISPOSE for it's own instance
(e.g. CoerceMethod( cl, (Object *)retval, OM_DISPOSE );) and
returns an error code.
RESULT
On success, a ptr to the object is returned,
on failure, 0UL is returned, Result2 (IoErr()) contains the
cause.
NOTE
animation.datatype/OM_SET animation.datatype/OM_SET
NAME
OM_SET -- Set the attributes of a animation.datatype object
FUNCTION
The OM_SET method is used to set the attributes of a
animation.datatype gadget. This method is passed to the superclass
first.
TAGS
<not complety written yet, sorry>
DTA_TopVert (LONG) -- Used to specify the vertical top image
position. The value is stored in
struct DTSpecialInfo -> si_TopVert. Values < 0 are set to 0.
Setting this value causes that the object returns non-zero
for OM_SET/OM_UPDATE, which should trigger an GM_RENDER with
GREDRAW_UPDATE (the topmost instance is responsible for doing
this).
This overrides superclass's functionality.
DTA_TopHoriz (LONG) -- Used to specify the horizontal top image
position. The value is stored in
struct DTSpecialInfo -> si_TopHoriz. Values < 0 are set to 0.
Setting this value causes that the object returns non-zero
for OM_SET/OM_UPDATE, which should trigger an GM_RENDER with
GREDRAW_UPDATE (the topmost instance is responsible for doing
this).
This overrides superclass's functionality.
ADTA_Remap (BOOL) -- Indicate whether the picture should be
remapped or not.
ADTA_Remap == TRUE does only work if DTM_FRAMEBOX sets the
FIF_REMAPABLE flag to indicate that animation.datatype
can remap the incoming data.
WARNING: This tag MUST not be changed while the object is
attached to a window or requester !
Applicability is (ISGU).
RESULT
Non-zero if a GM_RENDER with GREDRAW_UPDATE should be triggered
by the topmost class.
NOTE
SEE ALSO
OM_UPDATE, OM_NEW
animation.datatype/OM_UPDATE animation.datatype/OM_UPDATE
NAME
OM_UPDATE -- Update attributes
FUNCTION
OM_UPDATE updates anmation.datatype attributes, see OM_SET for
details.
TAGS
See OM_SET autodoc.
RESULT
NOTE
SEE ALSO
OM_SET, OM_NEW
animation.datatype/preferences animation.datatype/preferences
NAME
preferences
DESCRIPTION
The "ENV:Classes/DataTypes/animation.prefs" file contains global
settings for the animation datatype.
The preferences file is an ASCII file containing one line where the
preferences can be set.
It can be superset by a local variable with the same name.
Each line can contain settings, special settings for some subclasses
can be set using the MATCHCLASS option.
Lines beginning with a '#' or ';' chars are treated as comments.
Lines are limitted to 256 chars.
TEMPLATE
MATCHCLASS/K,VERBOSE/S,ADAPTIVEFPS/S,NOADAPTIVEFPS/S,
NUMPREFETCHFRAMES/K/N,WAITBOVP/S,NOWAITBOVP/S,OSBLITTER/S,
CPUBLITTER/S,CHOOSEBLITTER/S,SHARECHIP/S,NOSHARECHIP/S,HACKS/S,
NOHACKS/S
MATCHCLASS -- Public class name. If given, the current prefs line
is only for this subclass only.
Example: MATCHCLASS="cdxl.datatype"
VERBOSE -- Print information about the animation.
ADAPTIVEFPS -- If set, the animation.datatype recalculates the
playback rate that all frames and sounds can be displayed without
skipping.
This option is on per default starting with animation.datatype V41
NOADAPTIVEFPS -- Turns the ADAPTIVEFPS flag off.
NUMPREFETCHFRAMES -- Increases the number of frams which should
be pre-fetched by the load process.
Note: Increasing this value may cause the animation to run more
smoothly, but takes also more memory.
Defaults to 10.
WAITBOVP -- Wait until raster beam reaches the bottom of the current
viewport (screen). Only useful with some Gfx-Card-Software
or graphics.library > V40.
(In the future this option should be enabled if CyberGFX >= V41
is detected).
NOWAITBOVP -- Turns WAITBOVP flag off.
OSBLITTER -- Use OS blitter even on planar screens. It is
mutually exclusive to CPUBLITTER and CHOOSEBLITTER options.
This option is off per default.
CPUBLITTER - Use CPU blitter on planar screens. It is
mutually exclusive to OSBLITTER and CHOOSEBLITTER options.
This option is off per default.
CHOOSEBLITTER -- If destination is a planar screen, the datatype
makes a speed comparisation whether CPU or OS blitter is faster.
It is mutually exclusive to OSBLITTER and CPUBLITTER options.
This option is on per default.
SHARECHIP -- animation.datatype <= V41.5 tests incoming planar
bitmaps if they're in chipmem (using TypeOfMem) or not; if
they're in chipmem and there's no remapping required, they're
passed througth to BltBitMap rastport directly instead of
copy'ing them to a chipmem buffer and blit from there.
Using this option the TypeOfMem test can be turned on again,
which may be usefull for high-speed animations (> 30 fps) on
an own MultiView screen using the Amiga native screen modes.
This option is off per default.
NOSHARECHIP -- Turns the SHARECHIP option off.
This option is on per default.
HACKS -- Use some internal hacks (system-conform, but I don't
like them).
This option is on per default.
NOHACKS -- Turns HACKS option off.
NOTE
An invalid prefs file line will be ignored and forces the VERBOSE
output.
BUGS
- Low memory may cause that the prefs file won't be parsed.
- Lines are limitted to 256 chars
- An invalid prefs file line will be ignored.
- The sample path length is limitted to 200 chars. A larger
value may crash the machine if an error occurs.